home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac Power 1997 December
/
MACPOWER-1997-12.ISO.7z
/
MACPOWER-1997-12.ISO
/
AMUG
/
PROGRAMMING
/
Raven 1.2.sit
/
Raven 1.2
/
Source
/
Foundation
/
Common
/
ZLockable.cpp
< prev
next >
Wrap
Text File
|
1997-05-17
|
3KB
|
118 lines
/*
* File: ZLockable.h
* Summary: Mixin lockable objects.
* Written by: Jesse Jones
*
* Copyright ゥ 1996-1997 Jesse Jones.
* For conditions of distribution and use, see copyright notice in ZTypes.h
*
* Change History (most recent first):
*
* <2> 5/17/97 JDJ Uses PRECONDITION and POSTCONDITION macros.
* <1> 1/14/96 JDJ Created.
*/
#include <ZLockable.h>
#include <ZDebug.h>
// ===================================================================================
// class MBaseLockable
// ===================================================================================
//----------------------------------------------------------------
//
// MBaseLockable::~MBaseLockable
//
//----------------------------------------------------------------
MBaseLockable::~MBaseLockable()
{
}
//----------------------------------------------------------------
//
// MBaseLockable::MBaseLockable
//
//----------------------------------------------------------------
MBaseLockable::MBaseLockable()
{
}
#pragma mark -
// ===================================================================================
// class MLockable
// ===================================================================================
//----------------------------------------------------------------
//
// MLockable::~MLockable
//
//----------------------------------------------------------------
MLockable::~MLockable()
{
ASSERT(mLockCount == 0); // Make sure calls to Lock are balanced by calls to Unlock.
}
//----------------------------------------------------------------
//
// MLockable::MLockable
//
//----------------------------------------------------------------
MLockable::MLockable()
{
mLockCount = 0;
}
//----------------------------------------------------------------
//
// MLockable::Lock
//
//----------------------------------------------------------------
void MLockable::Lock(bool moveHigh)
{
PRECONDITION(mLockCount >= 0);
if (mLockCount == 0)
this->OnLock(moveHigh);
mLockCount++;
POSTCONDITION(mLockCount > 0);
}
//----------------------------------------------------------------
//
// MLockable::Unlock
//
//----------------------------------------------------------------
void MLockable::Unlock()
{
PRECONDITION(mLockCount >= 1); // Check for Unlock without prior lock.
if (mLockCount == 1)
this->OnUnlock();
mLockCount--;
POSTCONDITION(mLockCount >= 0);
}
//----------------------------------------------------------------
//
// MLockable::IsLocked
//
//----------------------------------------------------------------
bool MLockable::IsLocked() const
{
return mLockCount > 0;
}